/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cz.tpj.util;

import java.text.SimpleDateFormat;
import java.text.ParseException;

/**
 * Trieda starajuca sa o validaciu vstupnych parametrov
 * @author jabo
 */

public class Validation {

    public Validation() {

    }
    
   /**
    * 
    * kontroluje zadany string v parametre kontrolovane, ci nepresahuje rozsah, ak presahuje
    * vrati prazdny retazec, ak nepresahuje, tak vrati string
    * @param nazov (nazov premennej)
    * @param kontrolovane (kontrolovana premenna)
    * @param min (minimalny rozsah)
    * @param max (maximalny rozsah)
    * @return navrat
    * @throws cz.tpj.util.ErrorDatabase
    */
    
    public String validatedString(String nazov, String kontrolovane, int min, int max) throws ErrorDatabase {
        String navrat = "";
        try{
            if(kontrolovane == null)
                return navrat;
            int velkost = kontrolovane.length();
            if (velkost < min || velkost > max) {
                throw new ErrorDatabase(ErrorDatabase.INVALID_DATA_FORMAT, "Reťazec " + nazov + " prekročil sa nevošiel do stanoveného intervalu (" + min + " - " + max + " bajtov)");
            }
            navrat = kontrolovane;
        }catch(NumberFormatException e){
            throw new ErrorDatabase(ErrorDatabase.INVALID_DATA_FORMAT, "Reťazec " + nazov + " nebolo možné rozpoznať.");
        }
        return navrat;
    }

    
    /**
     * kontroluje hodnotu zadanu v parametri kontrolovanie a zisti, ci je v danom 
     * definovanom rozsahu paramtrami min a max
     * @param nazov (nazov validovanej premennej v programe)
     * @param kontrolovane (premenna, ktora sa validuje)
     * @param min (minimalny rozsah cisla)
     * @param max (maximalny rozsah cisla)
     * @return navrat
     * @throws cz.tpj.util.ErrorDatabase
     */
    
    public String validatedNumber(String nazov, String kontrolovane, int min, int max) throws ErrorDatabase {
        String navrat = "";
        try{
            int i = Integer.parseInt(kontrolovane);
            if(i < min || i >= max){
                throw new ErrorDatabase(ErrorDatabase.INVALID_DATA_FORMAT, "Číslo " + nazov + " prekročilo povolený interval (" + min + ";" + max + ")");
            }
            navrat = String.valueOf(i);
        }catch(NumberFormatException e){
            throw new ErrorDatabase(ErrorDatabase.INVALID_DATA_FORMAT, "Číslo " + nazov + " nebylo možno rospoznat.");
        }
        return navrat;
    }

    
    /**
     * validuje sa IP adresa zadana parametrom a to tak, ze 
     * prejde vsetky subcasti retazca, tak aby bol kazdy z nich
     * v rozsahu od 0 .. 255 a obsahoval len numericke hodnoty
     * @param Ip
     * @return Ip
     * @throws cz.tpj.util.ErrorDatabase
     */
    
    public String validatedIp(String Ip) throws ErrorDatabase {
        String str [] = Ip.split("[.]");
        if (str.length == 4) {
            for (String string : str) {
                try {
                    int number = Integer.parseInt(string);
                    if (number < 0 || number > 255) {
                        throw new ErrorDatabase("Zla IP adresa, maju byt cisla od 0 po 255 ");
                     }
                } catch (NumberFormatException e) {
                     throw new ErrorDatabase("Zla IP adresa, obsahuje nepovolene znaky ");
                }
            }
        } else {
             throw new ErrorDatabase("Zla IP adresa ");
        }
        return Ip;
    }
    
    /**
     * validuje sa zadany datum parametrom datum, ak je datum validny, tak sa 
     * vrati dany datum, inak sa vrati prazdny retazec
     * @param datum
     * @return navrat
     * @throws cz.tpj.util.ErrorDatabase
     */
    
    public String validatedDate(String datum) throws ErrorDatabase {
        String navrat = "";
        SimpleDateFormat sdf = new SimpleDateFormat ("y-M-d H:m:s") ;
        try {
            sdf.parse(datum);
        }
        catch (ParseException e) {
            throw new ErrorDatabase("Zly datum.");
        }
        navrat = datum;
        return navrat;
    }


}
